#ifndef PERSONAJEFANTASMA_H
#define PERSONAJEFANTASMA_H

#include "Personaje.h"
#include "Punto.h"
#include "Direccion.h"
#include "Fantasma.h"
#include "TexturasFantasma.h"


class PersonajeFantasma :  public Personaje{
	
	bool perseguido ;
	bool volviendoMuerto;
	bool siguiendoAOtro;

public:
	
	PersonajeFantasma(TexturasFantasma* texturas, Fantasma* objeto ,const string& id):Personaje(texturas,objeto,id){
		this->perseguido = false;
		this->volviendoMuerto = false;
		this->siguiendoAOtro = false;
	}
	
	virtual void calcularNuevaTextura(){

		Punto* antes = this->getObjeto()->getPosicionAnterior();
		Punto* despues = this->getObjeto()->getPosicion();

		this->perseguido = ((Fantasma*)this->getObjeto())->isSiendoCazado();
		this->volviendoMuerto = ((Fantasma*)this->getObjeto())->isRegresandoACueva();
		this->siguiendoAOtro = !((Fantasma*)this->getObjeto())->isSiguiendoPresaOriginal();

		if(!antes->coordenadasIguales(despues)){
			if(this->perseguido && !this->volviendoMuerto ){
				this->textura = ((TexturasFantasma*)this->texturas)->getSiguientePerseguido();
			}else if(this->volviendoMuerto){
				this->textura = ((TexturasFantasma*)this->texturas)->getSiguienteMuerto();
			}else if(this->siguiendoAOtro){
				this->textura = ((TexturasFantasma*)this->texturas)->getSiguienteSigueOtro();
			}else{
				Direccion* dirTemp = Direccion::calcularDireccion(antes,despues);
				
				if(dirTemp->esArriba()){
					this->textura = this->texturas->getSiguienteArriba();
				}else if(dirTemp->esAbajo()){
					this->textura = this->texturas->getSiguienteAbajo();
				}else if(dirTemp->esIzquierda()){
					this->textura = this->texturas->getSiguienteIzquierda();
				}else if(dirTemp->esDerecha()){
					this->textura = this->texturas->getSiguienteDerecha();
				}
				delete dirTemp;
			}
		}
	
	}

	void setPerseguido(bool per){
		this->perseguido = per ;
	}

	bool getPerseguido(){
		return this->perseguido ;
	}
	
};

#endif